<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
    /*
        💙 基本数据类型保存的是值，💛 引用数据类型保存的是对象的内存地址
    */
    /*
        基本数据类型
            String Number Boolean Null Undefined 
        引用数据类型    
            Object

        JS 中的变量都是保存在栈内存中   ⭐图片 : 栈内存，堆内存
            基本数据类型的值直接在栈内存中存储
            值与值之间是独立存在的，修改一个变量不会影响其他的变量

            对象是保存到堆内存中的，每创建一个新的对象，就会在堆内存中开辟出一个新的空间
            而变量保存的是对象的内存地址（对象的引用），如果两个变量保存的是同一个对象的引用，
            当一个通过一个变量修改属性时，另一个也会受到影响
    */

    var a = 123;
    var b = a;
    a++;
    console.log("a = "+a);
    console.log("b = "+b);

    var obj = new Object();

    obj.name = "孙悟空";
    obj.test2 = 456;
    var obj2 = obj;
    
    obj.name = "猪八戒";
    obj2.name = "沙和尚";
    document.write(obj.name);
    document.write(obj2.name);

    obj2 = null;
    document.write(obj);
    document.write(obj2);

    var obj3 = new Object();
    var obj4 = new Object();

    obj3.name = "唐僧";
    obj4.name = "唐僧";
    
    /*
        当比较两个基本数据类型时，就是比较值
        而比较两个引用数据类型时，比较的是对象的内存地址
            如果两个对象是一模一样的，但是地址不同，也会返回false
    */
    console.log(obj3.name);
    console.log(obj4.name);
    console.log(obj3 == obj4);
</script>